//filename sender.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define MAX_MSG_TEXT 100
#define MSG_QUEUE_KEY 1235

struct my_msgbuf {
    long mtype;
    char mtext[MAX_MSG_TEXT];
};

int main() {
    int msqid;
    key_t key;
    struct my_msgbuf buf;
    
    // ftok通常用于从路径名和一个项目ID生成一个唯一的键值，这里简化使用预定义的键值
    key = MSG_QUEUE_KEY;
    
    // 创建或打开消息队列
    if ((msqid = msgget(key, IPC_CREAT | 0666)) == -1) {
        perror("msgget");
        exit(1);
    }
    
    // 准备消息
    buf.mtype = 1;
    const char* str = "Hello from sender! Hello";
    strncpy(buf.mtext, str, strlen(str));
    while(1) {
        // 发送消息
        if (msgsnd(msqid, &buf, strlen(buf.mtext) + 1, 0) == -1) {
            perror("msgsnd");
            exit(1);
        }
        sleep(1);
        printf("Message sent successfully.\n");
    }
    
    // 清理：通常在程序结束时不需要立即删除消息队列，因为接收者可能还在使用
    // msgctl(msqid, IPC_RMID, NULL);
    
    return 0;
}